package top.ninwoo.edgecenter.service;

import top.ninwoo.common.entity.ClusterConfig;
import top.ninwoo.common.entity.DockerContainer;
import top.ninwoo.utils.entity.NetworkInfo;
import top.ninwoo.utils.entity.OvsBridge;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 *  这个模块的
 *  @author joliu
 */
public interface ClusterService {
    // 获取容器列表
    List<DockerContainer> getContainerIds();

    List<DockerContainer> getContainerIds(boolean isAll);

    // 创建容器组
    Map<String, Set<String>> initContainers(ClusterConfig clusterConfig);

    // 动态调整容器规模，涉及到网络的一个调整
    String adjustCluster(ClusterConfig clusterConfig);

    // 获取集群列表
    Set<Long> getClusterIds();
    // 通过集群Id获取集群中包含的容器IDs
    Set<String> getContainerIdsByClusterId(long clusterId, String containerName);
    // 移除Docker集群
    void removeContainersByClusterId(long clusterId);
    // 移除Docker集群中的某个容器
    void removeContainersByClusterIdAndContainerName(long clusterId, String name);

    // 获取网桥信息
    List<OvsBridge> getOvsBridges();

    List<NetworkInfo> getNetworkTraffic(Set<String> containerIds);

    NetworkInfo getNetworkInfoByContainerId(String containerId);


    // TODO: 临时的服务接口，待移除
    String createNetwork(long clusterId, String appName);

    String cpu();

    String mem();

    String cpu(String containerId);

    String mem(String containerId);
}
